import org.junit.Test;

import java.io.File;
import java.sql.SQLOutput;

/**
 * @author: wuhao
 * @since: 2021/4/19 22:39
 */
public class RecursionDir {

    /**
     * 3. 遍历指定目录所有文件名称，包括子文件目录中的文件。（
     * <p>
     * 拓展1：并计算指定目录占用空间的大小
     * <p>
     * 拓展2：删除指定文件目录及其下的所有文件
     * <p>
     * ）
     */
    @Test
    public void Test1() {
        String directory = "D:\\应用软件\\CloudMusic";
        File file = new File(directory);

        findAllFileName(file);

        Long fileDirSize = getFileDirSize();
        System.out.println(file.getAbsolutePath() + "-目录大小为:" + fileDirSize + " 字节");
    }

    //拓展1：并计算指定目录占用空间的大小
    long fileDirSize = 0;

    //获取指定目录下以及子目录下的所有文件名称
    private void findAllFileName(File file) {
        File[] files = file.listFiles();//获取此目录下所有的文件对象
        for (File file1 : files) {//遍历
            if (file1.isFile()) {//判断是否是文件
                System.out.println(file1.getName());
                fileDirSize += file1.length();
            }
            if (file1.isDirectory()) {//判断是否是目录
                findAllFileName(file1);//递归
            }
        }
    }

    //获取目录大小;
    private Long getFileDirSize() {
        return this.fileDirSize;
    }


    /**
     * 拓展2：删除指定文件目录及其下的所有文件
     */
    @Test
    public void Test2() {

        String directory = "D:\\io流";
        File file = new File(directory);
        deleteDir(file);
    }

    private void deleteDir(File file) {
        File[] files = file.listFiles();//获取此目录下所有的文件对象
        for (File file1 : files) {//遍历
            if (file1.isFile()) {//判断是否是文件
                file1.delete();//删除文件
            }
            if (file1.isDirectory()) {//判断是否是目录
                deleteDir(file1);//递归删除文件
                file1.delete();//删除目录
            }
        }
    }
}

